#include<bits/stdc++.h>
using namespace std;

int a[401][401], ans[401][401];
int dx[8] = {-2, -2, 2, 2, 1, -1, 1, -1};
int dy[8] = {-1, 1, -1, 1, 2, -2, -2, 2};

int main()
{
	int n, m, x, y;
	cin >> n >> m >> x >> y;
	memset(ans, -1, sizeof(ans));
	queue<int>qx, qy;
	qx.push(x);
	qy.push(y);
	ans[x][y] = 0;
	a[x][y] = 1;
	while (!qx.empty()) {
		for (int i = 0; i < 8; i++) {
			int ax = qx.front() + dx[i];
			int ay = qy.front() + dy[i];
			if ( ax > 0 && ax <= n && ay > 0 && ay <= m && a[ax][ay] == 0) {
				a[ax][ay] = 1;
				ans[ax][ay] = ans[qx.front()][qy.front()] + 1;
				qx.push(ax);
				qy.push(ay);
			}
		}
		qx.pop();
		qy.pop();
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cout << left << setw(5) << ans[i][j];
		}
		cout << endl;
	}
//	n = 3, m = 3;
//	int dp[n + 1][m + 1];
//	memset(dp, 0, sizeof(dp));
//
//
////	dp[1][1] = 0;
//	for (int i = 0; i < n + 1; i++) {
//		dp[i][0] = -1;
//	}
//	for (int i = 0; i < n + 1; i++) {
//		dp[0][i] = -1;
//	}
//	for (int i = 1; i < n + 1; i++) {
//		for (int j = 1; j < m + 1; j++) {
//			if (i == 1 && j == 1) {
//				dp[i][j]  = 0;
//			}
//			dp[i][j] = min(dp[i - 2][j - 1], dp[i - 1][j - 2]);
////			cout << dp[i][j] << " ";
//		}
//		cout << endl;
//	}
	return 0;
}
